﻿//打开窗口默认ID
var wid = "window-temp";
$.extend($.fn.textbox.defaults.rules, {
    //校验数字
    number: {
        validator: function (value) {
            return /^\d+$/.test(value);
        },
        message: '只能输入数字'
    },
    idcard: {
        validator: function (value) {
            return idCard(value);
        },
        message: '请输入正确的身份证号码'
    },
    onelength: {
        validator: function (value) {
            return /^[0-9A-Za-z]{1,1}$/.test(value);
        },
        message: '只能输入一位数字或字母'
    },
    onlylength: {
        validator: function (value) {
            //return IsTwoPoCode(value);
            return /^[0-9\d]{10}$/.test(value)//其他长度注意改正则
        },
        message: '只能输入10位数字'
    },
    lengthOneHundredForty: {
        validator: function (value) {
            return /^.{0,140}$/.test(value);
        },
        message: '最多只能输入140个字符'
    }
})
//表单回车事件自动绑定
function KeyCode13(formid) {
    $("form[id='" + formid + "'] input").keyup(function (e) {
        if (e.which == 13) {
            var inputs = $("form[id='" + formid + "']").find("input[id^='_easyui_textbox_input']");
            var idx = inputs.index(this);
            if (idx == inputs.length - 1) {
                return false;
            }
            var id = $(inputs[idx]).parent().prev().attr('id');
            var classname = $(inputs[idx]).parent().prev().attr('class');
            //alert(classname);
            var next = true;
            if (next) {
                inputs[idx + 1].focus();
                inputs[idx + 1].select();
            }
            return false;
        }
    });
}

//设置文本框readonly颜色
function SetReadonlyColor() {
    //设置只读属性的文本框的颜色是灰色。
    var allTextBox = $(".easyui-textbox");
    for (var i = 0; i < allTextBox.length; i++) {
        var op = $(allTextBox[i]).textbox("options");
        if (op.readonly == true) {
            $(allTextBox[i]).textbox('textbox').css('background', '#f3f3f3');
        }
    }
    ////日期格式
    //var alldatebox = $(".easyui-datebox");
    //for (var i = 0; i < alldatebox.length; i++) {
    //    var op1 = $(alldatebox[i]).datebox("options");
    //    if (op1.readonly == true) {
    //        $(alldatebox[i]).datebox('datebox').css('background', '#f3f3f3');
    //    }
    //}
    ////combobox
    //var allcombobox = $(".easyui-combobox");
    //for (var i = 0; i < allcombobox.length; i++) {
    //    var op2 = $(allcombobox[i]).combobox("options");
    //    if (op2.readonly == true) {
    //        $(allcombobox[i]).combobox('combobox').css('background', '#f3f3f3');
    //    }
    //}
}

//var IsTwoPoCode = function IsTwoPoCode(value) {
//    var len = value.length;
//    if (len < 10) {
//        $.fn.validatebox.defaults.rules.idcard.message = '请输入10位数字';
//        return false;
//    }
//    if (len > 10 && len <= 21) {
//        var JGF = value.substring(11, 11);
//        if (JGF != ',') {
//            $.fn.validatebox.defaults.rules.idcard.message = '输入订单号段同步时,两个订单号之间用","间隔';
//            return false;
//        }
//    }
//    if (len > 21) {
//        $.fn.validatebox.defaults.rules.idcard.message = '输入订单号段同步时,两个订单号之间用","间隔';
//        return false;
//    }

//}

var idCard = function idCard(num) {
    num = num.toUpperCase();
    //身份证号码为15位或者18位，15位时全为数字，18位前17位为数字，最后一位是校验位，可能为数字或字符X。      
    if (!(/(^\d{15}$)||(^\d{17}([0-9]|X)$)/.test(num))) {
        $.fn.validatebox.defaults.rules.idcard.message = '15位号码应全为数字，18位号码末位可以为数字或X。';
        return false;
    }
    //校验位按照ISO 7064:1983.MOD 11-2的规定生成，X可以认为是数字10。   
    //下面分别分析出生日期和校验位   
    var len, re;
    len = num.length;
    if (len == 15) {
        re = new RegExp(/^(\d{6})(\d{2})(\d{2})(\d{2})(\d{3})$/);
        var arrSplit = num.match(re);

        //检查生日日期是否正确   
        var dtmBirth = new Date('19' + arrSplit[2] + '/' + arrSplit[3] + '/' + arrSplit[4]);
        var bGoodDay;
        bGoodDay = (dtmBirth.getYear() == Number(arrSplit[2])) && ((dtmBirth.getMonth() + 1) == Number(arrSplit[3])) && (dtmBirth.getDate() == Number(arrSplit[4]));
        if (!bGoodDay) {
            $.fn.validatebox.defaults.rules.idcard.message = '输入的身份证号里出生日期不对！';
            return false;
        }
        else {
            //将15位身份证转成18位   
            //校验位按照ISO 7064:1983.MOD 11-2的规定生成，X可以认为是数字10。   
            var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
            var arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
            var nTemp = 0, i;
            num = num.substr(0, 6) + '19' + num.substr(6, num.length - 6);
            for (i = 0; i < 17; i++) {
                nTemp += num.substr(i, 1) * arrInt[i];
            }
            num += arrCh[nTemp % 11];
            return true;
        }
    }
    if (len == 18) {
        re = new RegExp(/^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/);
        var arrSplit = num.match(re);

        //检查生日日期是否正确   
        var dtmBirth = new Date(arrSplit[2] + "/" + arrSplit[3] + "/" + arrSplit[4]);
        var bGoodDay;
        bGoodDay = (dtmBirth.getFullYear() == Number(arrSplit[2])) && ((dtmBirth.getMonth() + 1) == Number(arrSplit[3])) && (dtmBirth.getDate() == Number(arrSplit[4]));
        if (!bGoodDay) {
            $.fn.validatebox.defaults.rules.idcard.message = '输入的身份证号里出生日期不对！';
            return false;
        }
        else {
            //检验18位身份证的校验码是否正确。   
            //校验位按照ISO 7064:1983.MOD 11-2的规定生成，X可以认为是数字10。   
            var valnum;
            var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
            var arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
            var nTemp = 0, i;
            for (i = 0; i < 17; i++) {
                nTemp += num.substr(i, 1) * arrInt[i];
            }
            valnum = arrCh[nTemp % 11];
            if (valnum != num.substr(17, 1)) {
                $.fn.validatebox.defaults.rules.idcard.message = '18位身份证的校验码不正确！应该为：' + valnum;
                return false;
            }
            return true;
        }
    }
    return false;
}



// 列表显示格式化
$.fn.bankList = function (options) {
    var defaults = {
        deimiter: ' ' // 分隔符
    };
    var opts = $.extend({}, defaults, options);
    return this.each(function () {
        $(this).text($(this).text().replace(/\s/g, '').replace(/(\d{4})(?=\d)/g, "$1" + opts.deimiter));
    })
}

/**********************************************************************/
/*登录提交时，将明文密码清空，设置隐藏域值作为提交值*/
//PWDID1 明文密码框
function MD5PWD(PWDID1) {
    try {
        //获取输入的明文密码
        var pwd = $("#" + PWDID1).val();
        //MD5加密处理
        var md5pwd = $.md5(pwd);
        //清空明文密码，不提交
        $("#" + PWDID1).val(md5pwd);
        return true;
    } catch (e) {
        alert('加密过程中出错');
        return false;
    }
}
/**********************************************************************/

//金额小写转大写
function smalltoBIG(n) {
    var fraction = ['角', '分'];
    var digit = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖'];
    var unit = [['元', '万', '亿'], ['', '拾', '佰', '仟']];
    var head = n < 0 ? '欠' : '';
    n = Math.abs(n);

    var s = '';

    for (var i = 0; i < fraction.length; i++) {
        //javascript的乘法结果会有误差 59189.34这个数在转大写时，得出 伍万玖仟壹佰捌拾玖元叁角叁分 而不是‘肆分’ 
        //n * 10的结果为  591893.3999999999 导致最后得出的数据有误  新引入accMul 乘法函数来避免此问题
        //s += (digit[Math.floor(n * 10 * Math.pow(10, i)) % 10] + fraction[i]).replace(/零./, '');
        s += (digit[Math.floor(accMul(accMul(n, 10), Math.pow(10, i))) % 10] + fraction[i]).replace(/零./, '');
    }
    s = s || '整';
    n = Math.floor(n);

    for (var i = 0; i < unit[0].length && n > 0; i++) {
        var p = '';
        for (var j = 0; j < unit[1].length && n > 0; j++) {
            p = digit[n % 10] + unit[1][j] + p;
            n = Math.floor(n / 10);
        }
        s = p.replace(/(零.)*零$/, '').replace(/^$/, '零') + unit[0][i] + s;
    }
    return head + s.replace(/(零.)*零元/, '元').replace(/(零.)+/g, '零').replace(/^整$/, '零元整');
}
//
//乘法函数，用来得到精确的乘法结果
//说明：javascript的乘法结果会有误差，在两个浮点数相乘的时候会比较明显。这个函数返回较为精确的乘法结果。
//调用：accMul(arg1, arg2)
//返回值：arg1乘以arg2的精确结果
function accMul(arg1, arg2) {
    var m = 0, s1 = arg1.toString(),
        s2 = arg2.toString();
    try {
        m += s1.split(".")[1].length
    } catch (e) { }
    try {
        m += s2.split(".")[1].length
    } catch (e) { }
    return Number(s1.replace(".", "")) * Number(s2.replace(".", "")) / Math.pow(10, m
    )
}
//说明：javascript的加法结果会有误差，在两个浮点数相加的时候会比较明显。这个函数返回较为精确的加法结果。 
//调用：accAdd(arg1,arg2) 
//返回值：arg1加上arg2的精确结果 
function accAdd(arg1, arg2) {
    var r1, r2, m;
    try { r1 = arg1.toString().split(".")[1].length } catch (e) { r1 = 0 }
    try { r2 = arg2.toString().split(".")[1].length } catch (e) { r2 = 0 }
    m = Math.pow(10, Math.max(r1, r2))
    return (arg1 * m + arg2 * m) / m
}
//给Number类型增加一个add方法，调用起来更加方便。 
Number.prototype.add = function (arg) {
    return accAdd(arg, this);
}
//说明：javascript的减法结果会有误差，在两个浮点数相加的时候会比较明显。这个函数返回较为精确的减法结果。 
//调用：accSub(arg1,arg2) 
//返回值：arg1减上arg2的精确结果 
function accSub(arg1, arg2) {
    return accAdd(arg1, -arg2);
}
//给Number类型增加一个sub方法，调用起来更加方便。 
Number.prototype.sub = function (arg) {
    return accSub(this, arg);
}
//说明：javascript的除法结果会有误差，在两个浮点数相除的时候会比较明显。这个函数返回较为精确的除法结果。 
//调用：accDiv(arg1,arg2) 
//返回值：arg1除以arg2的精确结果 
function accDiv(arg1, arg2) {
    var t1 = 0, t2 = 0, r1, r2;
    try { t1 = arg1.toString().split(".")[1].length } catch (e) { }
    try { t2 = arg2.toString().split(".")[1].length } catch (e) { }
    with (Math) {
        r1 = Number(arg1.toString().replace(".", ""))
        r2 = Number(arg2.toString().replace(".", ""))
        return (r1 / r2) * pow(10, t2 - t1);
    }
}
//给Number类型增加一个div方法，调用起来更加方便。 
Number.prototype.div = function (arg) {
    return accDiv(this, arg);
}
//保留两位小数
function toDecimal2(x) {
    var f = parseFloat(x);
    if (isNaN(f)) {
        return;
    }
    f = Math.round(x * 100) / 100;
    return f;
}


//获得easyui中datagrid中的选中行索引
function GetDGRowIndex(dgid) {

    var row = $('#' + dgid).datagrid('getSelected');
    var rowIndex = $('#' + dgid).datagrid('getRowIndex', row);
    return rowIndex;
}

//返回URL中的指定参数
function getUrlParam(name) {
    var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
    var r = window.location.search.substr(1).match(reg);
    if (r != null) return unescape(r[2]); return '';
}

//打开一个窗口 URL方式
function OpenWindow(title, url, width, height, top, left) {
    var wobj = document.getElementById(wid);
    if (wobj) $(wobj).remove();

    //动态创建window窗口
    $("<div id='" + wid + "' style='overflow:hidden'></div>").appendTo($("body"));

    //设置window属性
    $('#' + wid).window({
        width: width, height: height, top: top, left: left, modal: true, collapsible: false, minimizable: false, maximizable: false, title: title
    });

    $('#' + wid).html("<iframe  scrolling='no' frameborder='0'  src='" + url + "'  style='width:100%;height:100%;margin:0px;padding:0px;overflow:hidden;'></iframe>");
    $('#' + wid).window('open');
}
//打开一个窗口 HTML内容方式
function OpenWindow2(title, htmlContent, width, height) {

    var wobj = document.getElementById(wid);
    if (wobj) $(wobj).remove();

    //动态创建window窗口
    $("<div id='" + wid + "' style='overflow:scroll-y;height:" + height + "'></div>").appendTo($("body"));

    //设置window属性
    $('#' + wid).window({
        width: width, height: height, modal: true, collapsible: false, minimizable: false, maximizable: false, title: title
    });

    $('#' + wid).html(htmlContent);
    $('#' + wid).window('open');
}

//关闭窗口 
function CloseWindow() { $('#' + wid).window('close'); }
//关闭窗口并发送消息提醒
function CloseWindowSendMsg(wtcode) {
    $.messager.confirm("", "需要发送通知消息吗？", function (r) {

    })
    $('#' + wid).window('close');
}
//关闭窗口并提示消息
function CloseWindow(msg) {
    $('#' + wid).window('close');
    if (msg != "") {
        msg = "<div class='messager-icon icon-tip'></div>" + "<div>" + msg + "</div>";
        $.messager.show({
            title: '信息',
            msg: msg,
            showType: 'show',
            style: {
                left: 0, right: '', top: '',
                bottom: -document.body.scrollTop - document.documentElement.scrollTop
            }
        });
    }
}

//弹出一个右下角 提示消息
function ShowMsg(msg) {
    msg = "<div class='messager-icon icon-tip'></div>" + "<div>" + msg + "</div>";
    $.messager.show({ title: "提示", msg: msg, showType: 'show' });
}

//弹出一个中心提示消息
function ShowMsg2(msg) {
    msg = "<div class='messager-icon icon-tip'></div>" + "<div>" + msg + "</div>";
    $.messager.show({
        title: "操作提醒", msg: msg, showType: 'slide', timeout: 2000,
        style: {
            left: ($(document).width() - 300) * 0.5,
            top: ($(document).height() - 150) * 0.5
        }
    });
}

//生成随机数 用于URL防止缓存
function GetRandomNum(Min, Max) {
    var Range = Max - Min;
    var Rand = Math.random();
    return (Min + Math.round(Rand * Range));
}

//计算时间差值 如：1天 5小时 28分
function calfacttime(s, e) {
    var sd = new Date(s);
    var ed = new Date(e);
    var cz = sd.getTime() - ed.getTime();
    //计算出相差天数
    var days = Math.floor(cz / (24 * 3600 * 1000));
    //计算出小时数
    var leave1 = cz % (24 * 3600 * 1000);
    //计算天数后剩余的毫秒数
    var hours = Math.floor(leave1 / (3600 * 1000));
    //计算相差分钟数
    var leave2 = leave1 % (3600 * 1000);
    //计算小时数后剩余的毫秒数
    var minutes = Math.floor(leave2 / (60 * 1000));

    return (days <= 0 ? "" : (days + "天")) + (hours <= 0 ? "" : (hours + "小时")) + (minutes <= 0 ? "" : minutes + "分");
}

//计算日期时间差值 如：22小时
function calfacthours(s, e) {
    var sd = new Date(s.replace(/-/, '/'));
    var ed = new Date(e.replace(/-/, '/'));
    var cz = sd.getTime() - ed.getTime();
    //计算出相差天数
    var days = Math.floor(cz / (24 * 3600 * 1000));
    //计算出小时数
    var leave1 = cz % (24 * 3600 * 1000);
    //计算天数后剩余的毫秒数
    var hours = Math.floor(leave1 / (3600 * 1000));
    //计算相差分钟数
    var leave2 = leave1 % (3600 * 1000);
    //计算小时数后剩余的毫秒数
    var minutes = Math.floor(leave2 / (60 * 1000));
    //如果有分钟数，为1个一时
    if (minutes > 0) {
        hours = hours + 1;
    }
    var h = days * 24 + hours;
    return h;
}

//计算日期时间差值 如：2小时30分钟
function calfacthours2(s, e) {
    var sd = new Date(s.replace(/-/, '/'));
    var ed = new Date(e.replace(/-/, '/'));
    var cz = sd.getTime() - ed.getTime();
    //计算出相差天数
    var days = Math.floor(cz / (24 * 3600 * 1000));
    //计算出小时数
    var leave1 = cz % (24 * 3600 * 1000);
    //计算天数后剩余的毫秒数
    var hours = Math.floor(leave1 / (3600 * 1000));
    //计算相差分钟数
    var leave2 = leave1 % (3600 * 1000);
    //计算小时数后剩余的毫秒数
    var minutes = Math.floor(leave2 / (60 * 1000));
    //如果有分钟数，为1个一时
    if (minutes > 30) {
        hours = hours + 1;
    } else if (minutes > 0) { hours = hours + 0.5; }
    var h = days * 24 + hours;
    return h;
}
function MinuteDiff(time1, time2) {
    ////定义两个变量time1,time2分别保存开始和结束时间
    // time1 = "2017-12-02 12:25";
    // time2 = "2017-12-03 12:35";
    //判断开始时间是否大于结束日期
    if (time1 > time2) {
        return 0;
    }
    //截取字符串，得到日期部分"2009-12-02",用split把字符串分隔成数组
    var begin1 = time1.substr(0, 10).split("-");
    var end1 = time2.substr(0, 10).split("-");
    //将拆分的数组重新组合，并实例成化新的日期对象
    var date1 = new Date(begin1[1] + - +begin1[2] + - +begin1[0]);
    var date2 = new Date(end1[1] + - +end1[2] + - +end1[0]);
    //得到两个日期之间的差值m，以分钟为单位
    //Math.abs(date2-date1)计算出以毫秒为单位的差值
    //Math.abs(date2-date1)/1000得到以秒为单位的差值
    //Math.abs(date2-date1)/1000/60得到以分钟为单位的差值
    var m = parseInt(Math.abs(date2 - date1) / 1000 / 60);
    //小时数和分钟数相加得到总的分钟数
    //time1.substr(11,2)截取字符串得到时间的小时数
    //parseInt(time1.substr(11,2))*60把小时数转化成为分钟
    var min1 = parseInt(time1.substr(11, 2)) * 60 + parseInt(time1.substr(14, 2));
    var min2 = parseInt(time2.substr(11, 2)) * 60 + parseInt(time2.substr(14, 2));
    //两个分钟数相减得到时间部分的差值，以分钟为单位
    var n = min2 - min1;
    //将日期和时间两个部分计算出来的差值相加，即得到两个时间相减后的分钟数
    var minutes = m + n;
    return minutes;
}
//js时间计算
function DateAdd(interval, number, date) {
    switch (interval) {
        case "y": {
            date.setFullYear(date.getFullYear() + number);
            return date;
            break;
        }
        case "q": {
            date.setMonth(date.getMonth() + number * 3);
            return date;
            break;
        }
        case "m": {
            date.setMonth(date.getMonth() + number);
            return date;
            break;
        }
        case "w": {
            date.setDate(date.getDate() + number * 7);
            return date;
            break;
        }
        case "d": {
            date.setDate(date.getDate() + number);
            return date;
            break;
        }
        case "h": {
            date.setHours(date.getHours() + number);
            return date;
            break;
        }
        case "mm": {
            date.setMinutes(date.getMinutes() + number);
            return date;
            break;
        }
        case "s": {
            date.setSeconds(date.getSeconds() + number);
            return date;
            break;
        }
        default: {
            date.setDate(date.getDate() + number);
            return date;
            break;
        }
    }
}
function GetDateByAddMonth(sourceDate, months) {
    var date = new Date(sourceDate);//比如sourceDate传参“2019-03-31”
    var oldDate = date.getDate();//获取原来的月有多少日
    date.setDate(1);//设置为1日（day）
    date.setMonth(date.getMonth() + months);//设置新的月份(从0开始)  months 传参-1
    var newDay = new Date(date.getYear(), date.getMonth() + 1, 0).getDate();//获取新得到的月有多少日
    date.setDate(Math.min(oldDate, newDay));
    return date.getFullYear() + '-' + ((date.getMonth() < 9 ? '0' : '') + (date.getMonth() + 1)) + '-' + (date.getDate() < 10 ? '0' : '') + date.getDate();
    //console.log(date.toLocaleDateString()); // 2019/2/28
}
//JS计算时间（不带日期），返回时间（09:00）
function GetDateTime(number, time) {
    var dateNow = getCurrDate();
    var Date1 = dateNow + " " + time;
    var StartDate = DateAdd('mm', number, new Date(Date1.replace(/-/, '/')));
    var h = StartDate.getHours();
    var mm = StartDate.getMinutes();

    var dddd = (h < 10 ? ('0' + h) : h) + ":" + (mm < 10 ? ('0' + mm) : mm);
    return dddd;
}

//格式化时间函数 如：时:分
function formatTime(val, row) {
    if (val == "") return "";
    val = val.replace(/-/g, "/");
    var d = new Date(val);
    var h = d.getHours();
    var mm = d.getMinutes();
    var dddd = (h < 10 ? ('0' + h) : h) + ":" + (mm < 10 ? ('0' + mm) : mm);
    return dddd;
}

//格式化时间函数 如：月/日 时:分
function formatTime2(val, row) {
    if (val == "" || val == "undefined" || val == undefined) return "";
    val = val.replace(/-/g, "/");
    var date = new Date(val);
    var y = date.getFullYear();//年
    var m = date.getMonth() + 1;//月
    var d = date.getDate();//日
    var h = date.getHours();
    var mm = date.getMinutes();
    var md = (m < 10 ? ('0' + m) : m) + '/' + (d < 10 ? ('0' + d) : d);
    var hm = (h < 10 ? ('0' + h) : h) + ":" + (mm < 10 ? ('0' + mm) : mm);
    if (md == "NaN/NaN" || y == "1900") return "";
    return md + " " + hm;
}

//格式化时间函数 如：月/日
function formatTime3(val, row) {
    if (!val || val == "") return "";
    val = val.replace(/-/g, "/");
    var date = new Date(val);
    var m = date.getMonth() + 1;//月
    var d = date.getDate();//日
    var h = date.getHours();
    var mm = date.getMinutes();
    var md = (m < 10 ? ('0' + m) : m) + '/' + (d < 10 ? ('0' + d) : d);
    var hm = (h < 10 ? ('0' + h) : h) + ":" + (mm < 10 ? ('0' + mm) : mm);
    return md;
}

//格式化时间函数 如：年-月-日
function formatTime4(val) {
    if (!val || val == "") return "";
    val = val.replace(/-/g, "/");
    var date = new Date(val);
    var y = date.getFullYear();//年
    var m = date.getMonth() + 1;//月
    var d = date.getDate();//日
    var h = date.getHours();
    var mm = date.getMinutes();
    var ymd = y + '-' + (m < 10 ? ('0' + m) : m) + '-' + (d < 10 ? ('0' + d) : d);
    return ymd;
}

function getTime2Time() {
    var time1 = arguments[0], time2 = arguments[1];
    time1 = Date.parse(time1) / 1000;
    time2 = Date.parse(time2) / 1000;
    var time_ = time1 - time2;
    return (Math.ceil(Math.abs(time_) / (3600 * 24)));
}

//根据时间生成文件名
function GetDateFileName() {
    var date = new Date();
    var y = date.getFullYear();//年
    var m = date.getMonth() + 1;//月
    var d = date.getDate();//日
    var h = date.getHours();// 返回 Date 对象的小时 (0 ~ 23)。  
    var mm = date.getMinutes();// 返回 Date 对象的分钟 (0 ~ 59)。  
    var s = date.getSeconds();//返回 Date 对象的秒数 (0 ~ 59)。  
    var ss = date.getMilliseconds();// 返回 Date 对象的毫秒(0 ~ 999)。  
    var ymd = y + '' + (m < 10 ? ('0' + m) : m) + '' + (d < 10 ? ('0' + d) : d);
    var hm = (h < 10 ? ('0' + h) : h) + "" + (mm < 10 ? ('0' + mm) : mm);
    return ymd + hm + ss;
}
//当前时间 yyy-MM-dd HH:mm
function GetDateNow() {
    var date = new Date();
    var y = date.getFullYear();//年
    var m = date.getMonth() + 1;//月
    var d = date.getDate();//日
    var h = date.getHours();// 返回 Date 对象的小时 (0 ~ 23)。  
    var mm = date.getMinutes();// 返回 Date 对象的分钟 (0 ~ 59)。  
    var s = date.getSeconds();//返回 Date 对象的秒数 (0 ~ 59)。  
    var ss = date.getMilliseconds();// 返回 Date 对象的毫秒(0 ~ 999)。  
    var ymd = y + '-' + (m < 10 ? ('0' + m) : m) + '-' + (d < 10 ? ('0' + d) : d);
    var hm = (h < 10 ? ('0' + h) : h) + ":" + (mm < 10 ? ('0' + mm) : mm);
    return ymd + " " + hm;
}
///查询当前月份第一个天
function GetCurrMonthFirstDay() {
    var date = new Date();
    var y = date.getFullYear();//年
    var m = date.getMonth() + 1;//月
    var ym = y + '-' + (m < 10 ? ('0' + m) : m);
    return ym + "-01";
}
///查询当前年第一个天
function GetCurrYearFirstDay() {
    var date = new Date();
    var y = date.getFullYear();//年
    return y + "-01-01";
}
///查询当前年最后一个天
function GetCurrYearLastDay() {
    var date = new Date();
    var y = date.getFullYear();//年
    return y + "-12-31";
}
//当前时间 如：yyyy-MM-dd
function getCurrDate() {
    var date = new Date();
    var y = date.getFullYear();
    var m = date.getMonth() + 1;
    var d = date.getDate();
    return y + '-' + (m < 10 ? ('0' + m) : m) + '-' + (d < 10 ? ('0' + d) : d);
}
//当前时间 如：HH:mm
function GetTimeNow() {
    var date = new Date();
    var h = date.getHours();// 返回 Date 对象的小时 (0 ~ 23)。  
    var mm = date.getMinutes();// 返回 Date 对象的分钟 (0 ~ 59)。  
    var s = date.getSeconds();//返回 Date 对象的秒数 (0 ~ 59)。  
    var ss = date.getMilliseconds();// 返回 Date 对象的毫秒(0 ~ 999)。  
    var hm = (h < 10 ? ('0' + h) : h) + ":" + (mm < 10 ? ('0' + mm) : mm);
    return hm;
}
//获取当前时间最接近的刻度时间 如：HH:15  HH:30   HH:45   HH:00
function GetQuarterTimeNow() {
    var date = new Date();
    var h = date.getHours();// 返回 Date 对象的小时 (0 ~ 23)。  
    var mm = date.getMinutes();// 返回 Date 对象的分钟 (0 ~ 59)。  
    var Quarter = mm / 15;
    //console.log(Quarter);
    Quarter = Quarter.toFixed(0);//返回在第几个时刻里
    //console.log("四舍五入值" + Quarter);
    //Quarter = Quarter.toFixed(2);//返回在第几个时刻里
    //console.log("四舍五入值" + Quarter);

    //var QuarterStrs = Quarter.split('.');
    //console.log("数组" + QuarterStrs);
    //var Quarter_Z = 0;
    //var Quarter_X = 0;
    //if (QuarterStrs.length > 0) {
    //    var Quarter_Z = QuarterStrs[0];//返回刻度的整数
    //    console.log("数组1" + Quarter_Z);
    //    var Quarter_X = QuarterStrs[1];//返回刻度的小数
    //    console.log("数组2" + Quarter_X);
    //}
    //var mmtime = Quarter_Z * 15 + (Quarter_X >= 50 ? 15 : 0);
    var mmtime = Quarter * 15;
    //console.log("mmtime" + mmtime);
    if (mmtime == 60) {
        h = h == 23 ? 0 : h + 1;
        mmtime = 0;
    }
    //var s = date.getSeconds();//返回 Date 对象的秒数 (0 ~ 59)。  
    //var ss = date.getMilliseconds();// 返回 Date 对象的毫秒(0 ~ 999)。  
    var hm = (h < 10 ? ('0' + h) : h) + ":" + (mmtime);
    return hm;
}
//获取当前整点时间 如：HH:00
function GetHourNow() {
    var date = new Date();
    var h = date.getHours();// 返回 Date 对象的小时 (0 ~ 23)。  
    var mm = date.getMinutes();// 返回 Date 对象的分钟 (0 ~ 59)。  
    var s = date.getSeconds();//返回 Date 对象的秒数 (0 ~ 59)。  
    var ss = date.getMilliseconds();// 返回 Date 对象的毫秒(0 ~ 999)。  
    var hm = (h < 10 ? ('0' + h) : h) + ":" + ('00');
    return hm;
}
//获取当前日期 yyy-MM-dd HH:mm 前一天后一天等日期
function GetDateStr(AddDay, hourm) {
    var dd = new Date();
    dd.setDate(dd.getDate() + AddDay);//获取AddDayCount天后的日期 
    var y = dd.getFullYear();
    var m = dd.getMonth() + 1;//获取当前月份的日期 
    var d = dd.getDate();
    var h = dd.getHours();// 返回 Date 对象的小时 (0 ~ 23)。  
    var mm = dd.getMinutes();// 返回 Date 对象的分钟 (0 ~ 59)。  
    var s = dd.getSeconds();//返回 Date 对象的秒数 (0 ~ 59)。  
    var ss = dd.getMilliseconds();// 返回 Date 对象的毫秒(0 ~ 999)。 
    var ymd = y + '-' + (m < 10 ? ('0' + m) : m) + '-' + (d < 10 ? ('0' + d) : d);
    var hm = (hourm && hourm != "") ? hourm : (h < 10 ? ('0' + h) : h) + ":" + (mm < 10 ? ('0' + mm) : mm);
    return ymd + " " + hm;
}
//获取当前日期 前一天后一天等日期
function GetDateStr(AddDay) {
    var dd = new Date();
    dd.setDate(dd.getDate() + AddDay);//获取AddDayCount天后的日期 
    var y = dd.getFullYear();
    var m = dd.getMonth() + 1;//获取当前月份的日期 
    var d = dd.getDate();
    var h = dd.getHours();// 返回 Date 对象的小时 (0 ~ 23)。  
    var mm = dd.getMinutes();// 返回 Date 对象的分钟 (0 ~ 59)。  
    var s = dd.getSeconds();//返回 Date 对象的秒数 (0 ~ 59)。  
    var ss = dd.getMilliseconds();// 返回 Date 对象的毫秒(0 ~ 999)。 
    var ymd = y + '-' + (m < 10 ? ('0' + m) : m) + '-' + (d < 10 ? ('0' + d) : d);
    return ymd;
}
//获取指定时间的前一段时间或后一段时间,最前至00:00，最晚至23:59
function GetHourTime(basetime, addcount, addtype) {
    var result = "";
    var newtime = new Date('2021-10-21 ' + basetime);
    var hours = newtime.getHours()
    var mm = newtime.getMinutes();
    var ss = newtime.getSeconds();

    var newh = 0;
    var newmm = 0;
    var newss = 0;

    if (addtype == "h") {
        let thish = hours + addcount;
        newmm = mm;
        newss = ss;
        if (thish < 0)
            newh = 0;
        else if (thish > 23)
            newh = 23;
        else
            newh = thish;
    }
    if (addtype == "m") {
        let thisindex = mm + addcount;
        let isaddHour = true;
        if (thisindex < 0) {
            thisindex = 0 - thisindex;
            isaddHour = false;
        }
        let thism = thisindex % 60;
        let thish = Math.floor(thisindex / 60);
        if (isaddHour) newh = hours + thish;
        else newh = hours - thish;
        newmm = thism;
        newss = ss;
    }
    result = (newh < 10 ? ('0' + newh) : newh) + ":" + (newmm < 10 ? ('0' + newmm) : newmm) + ":" + (newss < 10 ? ('0' + newss) : newss);
    return result;
}


//转大写
function toUCase(v) { return v.toUpperCase(); }
//去左空格;
function ltrim(s) {
    return s.replace(/(^\s*)/g, "");
}
//去右空格;
function rtrim(s) {
    return s.replace(/(\s*$)/g, "");
}
//去左右空格;
function trim(s) {
    return s.replace(/(^\s*)|(\s*$)/g, "");
}
//字符串转Json
function strToJson(str) {
    var json = eval('(' + str + ')');
    return json;
}
//将日期字符串格式化为 yyyy-MM-DD HH:mm
function myformatter(date) {
    var y = date.getFullYear();
    var m = date.getMonth() + 1;
    var d = date.getDate();
    var h = date.getHours();
    var min = date.getMinutes();
    min = min < 10 ? "0" + min : min;
    return y + '-' + (m < 10 ? ('0' + m) : m) + '-' + (d < 10 ? ('0' + d) : d) + " " + h + ":" + min;
}
function myparser(s) {
    if (!s) return new Date();
    var ss = s.split('-');
    var y = parseInt(ss[0], 10);
    var m = parseInt(ss[1], 10);
    var d = parseInt(ss[2], 10);
    var h = parseInt(ss[3], 10);
    var min = parseInt(ss[4], 10);
    if (!isNaN(y) && !isNaN(m) && !isNaN(d)) {
        return new Date(y, m - 1, d, h, min);
    } else {
        return new Date();
    }
}
function GetEntrustStyle(isjd, wtstate) {
    if (wtstate == "已删除") { return 'text-decoration:line-through;color:#cccccc'; }
    if (wtstate == "完工") { return "color:green;"; }
    if (!isjd) { return 'color:red'; } //是否接单
    else {
        //委托状态
        switch (wtstate) {
            case "申请委托": return "color:red;"; break;
            case "临时委托": return "font:bold 12px/15px Arail;"; break;
        }
    }
}

/**
 * EasyUI DataGrid根据字段动态合并单元格
 * @param tableID 要合并table的id
 * @param colList 要合并的列,用逗号分隔(例如："name,department,office");
 */
function mergeCellsByField(tableID, colList) {
    var ColArray = colList.split(",");
    var tTable = $('#' + tableID);
    var TableRowCnts = tTable.datagrid("getRows").length;
    var tmpA;
    var tmpB;
    var PerTxt = "";
    var CurTxt = "";
    var alertStr = "";
    for (j = ColArray.length - 1; j >= 0; j--) {
        PerTxt = "";
        tmpA = 1;
        tmpB = 0;

        for (i = 0; i <= TableRowCnts; i++) {
            if (i == TableRowCnts) {
                CurTxt = "";
            }
            else {
                CurTxt = tTable.datagrid("getRows")[i][ColArray[j]];
            }
            if (PerTxt == CurTxt) {
                tmpA += 1;
            }
            else {
                tmpB += tmpA;
                tTable.datagrid('mergeCells', {
                    index: i - tmpA,
                    field: ColArray[j],
                    rowspan: tmpA,
                    colspan: null
                });
                tmpA = 1;
            }
            PerTxt = CurTxt;
        }
    }
}
//日期加上天数得到新的日期  
//dateTemp 需要参加计算的日期，days要添加的天数，返回新的日期，日期格式：YYYY-MM-DD  
function getNewDay(dateTemp, days) {
    var dateTemp = dateTemp.split("-");
    var nDate = new Date(dateTemp[1] + '-' + dateTemp[2] + '-' + dateTemp[0]); //转换为MM-DD-YYYY格式    
    var millSeconds = Math.abs(nDate) + (days * 24 * 60 * 60 * 1000);
    var rDate = new Date(millSeconds);
    var year = rDate.getFullYear();
    var month = rDate.getMonth() + 1;
    if (month < 10) month = "0" + month;
    var date = rDate.getDate();
    if (date < 10) date = "0" + date;
    return (year + "-" + month + "-" + date);
}


//计算天数差的函数，通用  
function DateDiff(sDate1, sDate2) {    //sDate1和sDate2是2006-12-18格式  
    var aDate, oDate1, oDate2, iDays
    aDate = sDate1.split("-")
    oDate1 = new Date(aDate[1] + '-' + aDate[2] + '-' + aDate[0])    //转换为12-18-2006格式  
    aDate = sDate2.split("-")
    oDate2 = new Date(aDate[1] + '-' + aDate[2] + '-' + aDate[0])
    iDays = parseInt(Math.abs(oDate1 - oDate2) / 1000 / 60 / 60 / 24)    //把相差的毫秒数转换为天数  
    return iDays
}

//计算两个日期相差的月份
function getMonths(date1, date2) {
    //用-分成数组
    date1 = date1.split("-");
    date2 = date2.split("-");
    //获取年,月数
    var year1 = parseInt(date1[0]),
        month1 = parseInt(date1[1]),
        year2 = parseInt(date2[0]),
        month2 = parseInt(date2[1]),
        //通过年,月差计算月份差
        months = (year2 - year1) * 12 + (month2 - month1) + 1;
    return months;
}

//使用var amount = fmoney(123456.78,2);

//console.log(amount);

//结果：123,456.78
function fmoney(s, n) {
    if (isRealNum(s)) {
        n = n > 0 && n <= 20 ? n : 2;
        s = parseFloat((s + '').replace(/[^\d\.-]/g, '')).toFixed(n) + '';
        var l = s.split('.')[0].split('').reverse(),
            r = s.split('.')[1];
        var t = '';
        for (var i = 0; i < l.length; i++) {
            t += l[i] + ((i + 1) % 3 == 0 && (i + 1) != l.length ? ',' : '');
        }
        return t.split('').reverse().join('') + '.' + r;
    } else return "0";
}
//列表的数字格式化 千分符
function formatMoneyQF(val, row) {
    if (isRealNum(val))
        return fmoney(val, 2);
    else return "0";
}
/**
*判断是否是数字
*
**/
function isRealNum(val) {
    // isNaN()函数 把空串 空格 以及NUll 按照0来处理 所以先去除
    if (val === "" || val == null) {
        return false;
    }
    if (!isNaN(val)) {
        return true;
    } else {
        return false;
    }
}
//保留两位小数
function toDecimal(x) {
    var f = parseFloat(x);
    if (isNaN(f)) {
        return 0;
    }
    f = Math.round(x * 100) / 100;
    return f;
}

//列表的数字格式化 保留两位小数
function formatNumberRound2(val, row) {
    if (isRealNum(val))
        return toDecimal(val);
    else return "0";
}

//将日期格式转化为2018/09/01 10:10 这种形式转化成2018-09-01 10:10
function parseDate1(date) {
    if (!date || date == "") return "";
    return new Date(Date.parse(date.replace(/-/g, "/")));
}
//格式化显示 ，只显示年月日
function formatterDate1(date) {
    var y = date.getFullYear();
    var m = date.getMonth() + 1;
    var d = date.getDate();
    var h = date.getHours();
    return y + '-' + (m < 10 ? ('0' + m) : m) + '-' + (d < 10 ? ('0' + d) : d);
    //return y + '-' + (m < 10 ? ('0' + m) : m) + '-' + (d < 10 ? ('0' + d) : d) + '-' + (h < 10 ? ('0' + h) : h) + '点';

}
//格式化显示 ，显示年月日 时分秒
function formatterDateTime1(date) {
    var y = date.getFullYear();
    var m = date.getMonth() + 1;
    var d = date.getDate();
    var h = date.getHours();
    var min = date.getMinutes();
    min = min < 10 ? "0" + min : min;
    //return y + '-' + (m < 10 ? ('0' + m) : m) + '-' + (d < 10 ? ('0' + d) : d);
    return y + '-' +
        (m < 10 ? ('0' + m) : m) + '-' +
        (d < 10 ? ('0' + d) : d) + '-' +
        (h < 10 ? ('0' + h) : h) + ":" + min;
}
function getSysOptions(typeCode) {
    $.ajax({
        url: '/M_BaseSetting/M_BaseSetting.ashx?method=GetSysOptionsParamList&TypeCode=' + typeCode + '&random=' + GetRandomNum(1, 1000),
        success: function (data) {
            return data;
        }
    })
}



function getBase64Image(img) {
    var canvas = document.createElement("canvas");
    canvas.width = img.width;
    canvas.height = img.height;
    var ctx = canvas.getContext("2d");
    ctx.drawImage(img, 0, 0, img.width, img.height);
    var ext = img.src.substring(img.src.lastIndexOf(".") + 1).toLowerCase();
    var dataURL = canvas.toDataURL("image/" + ext);
    return dataURL;
}



/**
 获取id
 使用方法 var tid = guid();
 **/
function guid() {
    return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
        var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);
        return v.toString(16);
    });
}





//判断密码是否合法  密码最少8个最多12个字符，至少1个大写字母，1个小写字母，1个数字和1个特殊字符
function checkpwd(value) {
    console.log(value);
    //var reg = /^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{8,12}$/;
    //if (!reg.test(value)) {
    //    //密码必须包含。。。
    //    $.messager.alert('提示', '密码最少8个最多12个字符，至少1个大写字母，1个小写字母，1个数字和1个特殊字符,请重新输入！', 'info');
    //    return false;
    //}
    var pwdRegex = new RegExp('(?=.*[0-9])(?=.*[A-Z])(?=.*[a-z])(?=.*[^a-zA-Z0-9]).{8,12}');
    if (!pwdRegex.test(value)) {
        //密码必须包含。。。
        $.messager.alert('提示', '密码最少8个最多12个字符，至少1个大写字母，1个小写字母，1个数字和1个特殊字符,请重新输入！', 'info');
        return false;
    }
}



//form转json
$.fn.serializeObject = function () {
    var o = {};
    var a = this.serializeArray();
    $.each(a, function () {
        if (o[this.name] !== undefined) {
            if (!o[this.name].push) {
                o[this.name] = [o[this.name]];
            }
            o[this.name].push(this.value || '');
        } else {
            o[this.name] = this.value || '';
        }
    });
    return o;
};


//排序时使用  arr.sort(sortNumber))
function sortNumber(a, b) {
    return a - b
}